package com.smasher.core.encrypt.base;

public class BaseUtils {
    /**
     * 二进位组转十六进制字符串
     *
     * @param buf 二进位组
     * @return 十六进制字符串
     */
    public static String parseByte2HexStr(byte[] buf) {
        // 如果输入数组为空，则直接返回空字符串
        if (buf == null || buf.length == 0) {
            return "";
        }

        // 初始化 StringBuilder 的容量，避免不必要的扩容操作
        StringBuilder sb = new StringBuilder(buf.length * 2);

        for (byte b : buf) {
            // 使用格式化字符串简化代码
            sb.append(String.format("%02X", b & 0xFF));
        }

        return sb.toString();
    }

    /**
     * 十六进制字符串转二进位组
     *
     * @param hexStr 十六进制字符串
     * @return 二进位组
     */
    public static byte[] parseHexStr2Byte(String hexStr) {
        // 如果输入为空字符串，则返回空数组
        if (hexStr == null || hexStr.isEmpty()) {
            return new byte[0];
        }

        // 确保输入字符串长度为偶数
        if (hexStr.length() % 2 != 0) {
            throw new IllegalArgumentException("The length of hex string must be even.");
        }

        // 初始化结果数组
        byte[] result = new byte[hexStr.length() / 2];

        for (int i = 0; i < hexStr.length(); i += 2) {
            // 提取两个字符并转换为字节
            int high = Character.digit(hexStr.charAt(i), 16);
            int low = Character.digit(hexStr.charAt(i + 1), 16);

            // 验证字符是否为有效的十六进制字符
            if (high == -1 || low == -1) {
                throw new IllegalArgumentException("Invalid hex character in the input string.");
            }

            // 组合高低四位
            result[i / 2] = (byte) ((high << 4) | low);
        }

        return result;
    }
}
